stack: Add a GtkStackPage::visible property
authorMatthias Clasen <mclasen@redhat.com>
Sun, 10 Feb 2019 23:13:03 +0000 (18:13 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 10 Feb 2019 23:43:59 +0000 (18:43 -0500)
This will let GtkStackSwitcher track visibility
without having to interact with the widgets directly.

gtk/gtkstack.c

index 338199c3193fd5fc3fe93dd4740401158ffc93c6..5e430f67090bb8b7a389bbd1528d40ce1d76af6a 100644 (file)
@@ -169,6 +169,7 @@ enum
   CHILD_PROP_ICON_NAME,
   CHILD_PROP_POSITION,
   CHILD_PROP_NEEDS_ATTENTION,
+  CHILD_PROP_VISIBLE,
   LAST_CHILD_PROP
 };
 
@@ -179,6 +180,7 @@ struct _GtkStackPage {
   gchar *title;
   gchar *icon_name;
   gboolean needs_attention;
+  gboolean visible;
   GtkWidget *last_focus;
 };
 
@@ -194,6 +196,7 @@ G_DEFINE_TYPE (GtkStackPage, gtk_stack_page, G_TYPE_OBJECT)
 static void
 gtk_stack_page_init (GtkStackPage *page)
 {
+  page->visible = TRUE;
 }
 
 static void
@@ -255,6 +258,10 @@ gtk_stack_page_get_property (GObject      *object,
       g_value_set_boolean (value, info->needs_attention);
       break;
 
+    case CHILD_PROP_VISIBLE:
+      g_value_set_boolean (value, info->visible);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -340,6 +347,16 @@ gtk_stack_page_set_property (GObject      *object,
         }
       break;
 
+    case CHILD_PROP_VISIBLE:
+      if (info->visible != g_value_get_boolean (value))
+        {
+          info->visible = g_value_get_boolean (value);
+          if (info->widget)
+            gtk_widget_set_visible (info->widget, info->visible);
+          g_object_notify_by_pspec (object, pspec);
+        }
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -405,6 +422,13 @@ gtk_stack_page_class_init (GtkStackPageClass *class)
                          FALSE,
                          GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
+  stack_child_props[CHILD_PROP_VISIBLE] =
+    g_param_spec_boolean ("visible",
+                         P_("Visible"),
+                         P_("Whether this page is visible"),
+                         TRUE,
+                         GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
   g_object_class_install_properties (object_class, LAST_CHILD_PROP, stack_child_props);
 }